package jheej5024;

public class J22_privateConstructor {

	//private으로 선언된 생성자
	//일반적으로 모든 생성자는 public이어야 함
	//클래스에 대한 객체를생성하려면
	//반드시 필요한 것이  생성자이기 때문임
	
	//하지만,어떤 생성자는 private으로 만들어서
	//그들의 클래스가 객체화되지 못하게 하는 경우도 있음
	//private 생성자를 사용한 클래스를 singleton 클래스라 부름
	
	//생성자는 private으로 선언
	//객체변수는 private stataic 으로 선언해서 
	//클래스의 객체를 메서드를 통해 접근 가능
	
	public static void main(String[] args) {
		/*Singleton one = new Singleton();
		Singleton two = new Singleton();
		Singleton three = new Singleton();*/

		Singleton one = Singleton.newInstance();
		Singleton two = Singleton.newInstance();
		Singleton three = Singleton.newInstance();
		
	}

} //J22

class Singleton {
	
	private static Singleton object= null;
	//object는 ststic으로 선언되었기 때문에
	//단 하나의 객체만 생성가능
	
	
	/*public Singleton() {
	 * 
		System.out.println("객체가 하나 만들어졌어요");
	}*/  //일반적인 생성자	
	private Singleton() {
		System.out.println("객체가 하나 만들어졌어요");
	} //특수한 생성자
	
	/*public static Singleton newInstance() {
		Singleton object= new Singleton();
		return object;
	} */ //생성자는 일반메서드를 통해서만 호출 
	
	public static Singleton newInstance() {
		if(object==null)object = new Singleton();
		//객체가 만들어지지 않았다면(obejct==null)
		//객체를 하나 생성함(new Singleton)
		return object;
		
		
	}
}